#pragma once

#include "IGameState.h"


/* Forward Declarations */
class CSGD_Direct3D;
class CSGD_DirectInput;
class CSGD_TextureManager;
class CSGD_XAudio2;
class CSGD_MessageSystem;
class CSGD_EventSystem;
class CObjectManager;
class CRenderer;
class IMessage;
class CPlayer;



class CGameplayState :
	public IGameState
{
public:
	/* SINGLETON */
	static CGameplayState* GetInstance( void );

	/* IGameState interface */
	virtual void Enter	( void );
	virtual void Exit	( void );

	virtual bool Input	( void );
	virtual void Update ( float fElapsedTime );
	virtual void Render ( void );

	/* MESSAGE PROC */
	static void MessageProc( IMessage* pMsg );

	bool TestXmlOut( const char * szFilename );
	bool TestXmlIn( const char * szFilename );

	


private:

	/* SINGLETON */
	CGameplayState(void);
	virtual ~CGameplayState(void);
	CGameplayState( const CGameplayState& );
	CGameplayState& operator= ( const CGameplayState& );

	/* WRAPPERS */
	CSGD_Direct3D*					m_pD3D;
	CSGD_DirectInput*				m_pDI;
	CSGD_TextureManager*			m_pTM;
	CSGD_XAudio2*					m_pXA;
	CSGD_MessageSystem*				m_pMS;
	CSGD_EventSystem*				m_pES;
	CObjectManager*					m_pOM;
	CRenderer*						m_pRenderer;

	CPlayer*						m_pPlayer;
	

	//Temporary Variables
	bool isPause;
	
};

